A fundamental requirement of most computer systems is to accurately report the current time. This service is used in a number of contexts, but most commonly to read the time of day (wall-clock time) or to measure the time between two events. A timer (oscillator plus counter) on the CPU (Central Processing Unit or Processor) is commonly calibrated to an standard reference time, such an external time-of-day or UTC (Universal Time Constant), by taking a counter timestamp (ls) at a known standard reference time, e.g., UTC time, (us), and calculating the relative frequency of the reference time, UTC, and the CPU timer (du/dl). The current time can then be calculated by reading the local CPU timer value:u=us+(l−ls)*du/dl 
A multiprocessor system is more complicated because each CPU has an independent timer, wherein each timer may potentially have an unsynchronized time value and frequency. The single processor scheme does not trivially extend to this case because the established method for synchronizing with UTC, NTP (Network Time Protocol), is implemented with a user-space daemon that will inherently synchronize only the timer of the CPU on which it is running.
A common solution, employed in Linux® (Linus Torvalds, Portland, Oreg., U.S.), is to synchronize with a shared timer that is accessible by all CPUs. This timer is usually implemented in the platform chipset. This strategy has two disadvantages in the context of virtualization:
1. Reading a platform chipset register is usually much slower than reading a local CPU register. This will be especially noticeable if time is read frequently.
2. Although all systems that use a particular type of CPU will necessarily share the same CPU-local timer implementation and interface, platform timers are not so homogeneous. For example, on Intel x86 systems there may be one or more of legacy PIT (Programmable Interval Timer), HPET (High Precision Event Timer), or a vendor-specific timer (e.g., IBM Cyclone). This platform-specific information may be propagated to the virtual machine (VM) which adds complexity to the hypervisor and to the guest OS (Operating System), and binds the virtual machine more tightly to the physical hardware.